package com.ete.service.db.dao

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.ete.service.entry.hardware.HardwareInfoEntry

/**
 * Author:LiXian
 * <p>
 * Desc:TODO
 * Version:1.0
 * date 2024/1/22 16:05
 */
@Dao
interface HardwareInfoDao : BaseDao<HardwareInfoEntry> {

    /**
     * 查询所有未上传的设备信息列表
     *
     * @return 未上传的硬件信息列表
     */
    @Query("select * from t_hardware_info where uploadState = 0")
    fun getNotUploadHardwareInfoList(): List<HardwareInfoEntry>

    /**
     * 查询最新一条主机类型的设备信息
     *
     * @return 最新一条的主机类型的设备信息
     */
    @Query("select * from t_hardware_info where type = 1 order by createTime desc limit 1")
    fun getLatestUploadHostHardwareInfo(): HardwareInfoEntry?

    /**
     * 保存或更新硬件信息
     *
     * @param mHardwareInfo 硬件信息
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun saveOrUpdate(mHardwareInfo: HardwareInfoEntry)

    /**
     * 更新指定记录的网络类型
     *
     * @param id          记录id
     * @param networkType 网络类型
     */
    @Query("update t_hardware_info set networkType = :networkType where serialNumber = :id")
    fun updateDeviceNetworkType(id: String, networkType: Int)

    /**
     * 保存硬件信息列表
     *
     * @param list 硬件信息列表
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun saveAll(list: List<HardwareInfoEntry>)

    /**
     * 删除指定ID外的所有数据
     *
     * @param id 保留不删除的记录id
     */
    @Query("delete from t_hardware_info where serialNumber != :id")
    fun deleteWithoutId(id: String?)

    /**
     * 查询数据库中，根据设备ID，获取设备数量
     *
     * @return 设备数量
     */
    @Query("select count(*) from t_hardware_info where deviceId = :mDeviceId")
    fun getHardwareByDeviceId(mDeviceId: String): Int
}